package com.everflourish.yeah100.utils;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

/**
 * 日期格式类
 *
 * @author pf
 * @date 2015-2-13
 */
public class DateFormatUtil {
    /**
     * 将Date转换自定义的String类型 y :年 M:月 d:日 hh:时(12进制显示) H:时(24进制显示) m:分 s:秒
     * a:上午或者下午 z:时区 W :月份的周数 w:年中的周数 F:月份中的星期 E：星期中的天数 S：毫秒数 Z：时区信息
     * <p/>
     * 如：yyyy-mm-dd HH:mm:ss a z E ： 2015-04-13 16:04:04 下午 CST 星期五 24
     *
     * @param date
     * @param pattern
     * @return
     */
    public static String convertDateToStr(Date date, String pattern) {
        DateFormat dateFormat = new SimpleDateFormat(pattern, Locale.CHINA);
        return dateFormat.format(date);
    }

    /**
     * 将毫秒值转换自定义的String类型 y :年 M:月 d:日 hh:时(12进制显示) H:时(24进制显示) m:分 s:秒 a:上午或者下午
     * z:时区 W :月份的周数 w:年中的周数 F:月份中的星期 E：星期中的天数 S：毫秒数 Z：时区信息
     * <p/>
     * 如：yyyy-mm-dd HH:mm:ss a z E ： 2015-04-13 16:04:04 下午 CST 星期五 24
     *
     * @param milliseconds 毫秒值
     * @param pattern
     * @return
     */
    public static String convertMillisecondsToStr(long milliseconds,
                                                  String pattern) {
        DateFormat dateFormat = new SimpleDateFormat(pattern, Locale.CHINA);
        return dateFormat.format(new Date(milliseconds));
    }

    /**
     * 将日期字符串转换自定义的String类型 y :年 M:月 d:日 hh:时(12进制显示) H:时(24进制显示) m:分 s:秒 a:上午或者下午
     * z:时区 W :月份的周数 w:年中的周数 F:月份中的星期 E：星期中的天数 S：毫秒数 Z：时区信息
     * <p/>
     * 如：yyyy-mm-dd HH:mm:ss a z E ： 2015-04-13 16:04:04 下午 CST 星期五 24
     *
     * @param srcStr
     * @param srcPattern
     * @param desPattern
     * @return
     * @throws ParseException
     */
    public static String convertStrToStr(String srcStr, String srcPattern, String desPattern) throws ParseException {
        long milliseconds = convertStrToMilliseconds(srcStr, srcPattern);
        return convertMillisecondsToStr(milliseconds, desPattern);
    }

    /**
     * 将日期字符串转换日期类型 y :年 M:月 d:日 hh:时(12进制显示) H:时(24进制显示) m:分 s:秒 a:上午或者下午 z:时区
     * W :月份的周数 w:年中的周数 F:月份中的星期 E：星期中的天数 S：毫秒数 Z：时区信息
     * <p/>
     * 如：yyyy-mm-dd HH:mm:ss a z E ： 2015-04-13 16:04:04 下午 CST 星期五 24
     *
     * @param dateStr 日期字符串
     * @param pattern
     * @return
     * @throws ParseException
     */
    public static Date convertStrToDate(String dateStr, String pattern)
            throws ParseException {
        DateFormat dateFormat = new SimpleDateFormat(pattern, Locale.CHINA);
        return dateFormat.parse(dateStr);
    }

    /**
     * 将日期字符串转换毫秒值 y :年 M:月 d:日 hh:时(12进制显示) H:时(24进制显示) m:分 s:秒 a:上午或者下午 z:时区 W
     * :月份的周数 w:年中的周数 F:月份中的星期 E：星期中的天数 S：毫秒数 Z：时区信息
     * <p/>
     * 如：yyyy-mm-dd HH:mm:ss a z E ： 2015-04-13 16:04:04 下午 CST 星期五 24
     *
     * @param dateStr 日期字符串
     * @param pattern
     * @return
     * @throws ParseException
     */
    public static long convertStrToMilliseconds(String dateStr, String pattern)
            throws ParseException {
        DateFormat dateFormat = new SimpleDateFormat(pattern, Locale.CHINA);
        return dateFormat.parse(dateStr).getTime();
    }

    /**
     * 在月日时分秒前补0
     *
     * @param year
     * @param monthOfYear
     * @param dayOfMonth
     * @return
     */
    public static long getTime(int year, int monthOfYear, int dayOfMonth) throws ParseException {
        StringBuffer sb = new StringBuffer();
        String s1, s2;
        if (monthOfYear + 1 <= 9) {
            s1 = "0";
        } else {
            s1 = "";
        }
        if (dayOfMonth <= 9) {
            s2 = "0";
        } else {
            s2 = "";
        }
        sb.append(year).append("-").append(s1 + (monthOfYear + 1)).append("-").append(s2 + dayOfMonth).append(" ")
                .append(00).append(":").append(00);
        Date dateTemp = convertStrToDate(sb.toString(), "yyyy-MM-dd HH:mm");
        return dateTemp.getTime();
    }
}
